Texture data can be compressed (encoded) to reduce the amount of memory required to store textures and to reduce the bandwidth needed to read the textures. One commonly used texture compression scheme is S3 Texture Compression (S3TC), also referred to as DirectX Texture Compression (DXTC or DXTn). “True-color” images use eight (8) bits for each set of red (R), green (G) and blue (B) components in a texel—24 bits per texel and 384 bits for a four-by-four (4×4) block of 16 texels. With S3TC, a block of texel data can be reduced to 64 bits, a compression ratio of six-to-one.
This is accomplished in S3TC by first using the 16 “RGB-tuples” (a set of RGB component values that describe a color) in a 4×4 block of texels to calculate two (2) representative colors C0 and C1, which are stored as 16 bits each (32 bits total) in RGB565 format. More specifically, the representative colors C0 and C1 are computed as the eigenvalues of the inertia tensor matrix defined by the 16 texels in a 4×4 block.
Each of the 16 RGB-tuples is then mapped to a line in RGB space that has the representative colors C0 and C1 as endpoints. Each RGB-tuple is associated with an index value depending on where the set of colors falls on that line. More specifically, the indices are computed by finding the perpendicular intersection between the line in RGB space and a line to each texel's colors. The 16 indices can each be represented using 2 bits—an additional 32 bits and a total of 64 bits per 4×4 block.
Although S3TC effectively compresses the data while maintaining the quality of the decoded (decompressed) image, the selection of the representative colors C0 and C1 and the computation of the indices can require relatively sophisticated processing.